This is an R Markdown format used for publishing markdown documents to GitHub. When you click the Knit button all R code chunks are run and a markdown file (.md) suitable for publishing to GitHub is generated.
You can include R code in the document as follows:
summary(cars)#0. Cleaning and set-up R----
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
rm(list = ls())
GEONAMES_USER = "dieghernan"
library(pacman)
## Warning: package 'pacman' was built under R version 3.5.3
p_load(dplyr,
jsonlite)
library(readxl)
## Warning: package 'readxl' was built under R version 3.5.3
#Find airports----
myflights <- read_excel("flights.xlsx")
tosearch=data.frame(toloc=(sort(append(myflights$start,myflights$end))),
stringsAsFactors = F)
tosearch = tosearch %>% count(toloc) %>% arrange(desc(n)) %>% as.data.frame()
tosearch$tofun = gsub(" ", "+", tosearch$toloc)
tosearch$tofun=ifelse(tosearch$toloc=="San Sebastian",
"san+sebastian+es",
tosearch$tofun)
airports <- function(place, n = 1, lang = "en") {
url = paste(
"http://api.geonames.org/searchJSON?formatted=true&username=",
GEONAMES_USER,
"&style=medium&fcode=AIRP&lang=",
lang,
"&maxRows=",
paste(n),
"&q=",
place,
sep = ""
)
geonames = fromJSON(url)
geonames = data.frame(geonames[["geonames"]])
geonames$search = place
geonames = geonames %>% select(
tofun=search,
toponymName,
countryCode,
long=lng,
lat
)
return(geonames)
}
#Return
for (i in 1:nrow(tosearch)) {
res = airports(tosearch[i, c("tofun")])
row.names(res) <- i
if (i == 1) {
final = res
} else {
final = rbind(final, res)
}
rm(res)
}
rm(i)
final$long=as.numeric(final$long)
final$lat=as.numeric(final$lat)
#Some statistics----
#Number times per city----
ndots=left_join(tosearch,final) %>%
select(
name=toloc,
countryCode,
Airport=toponymName,
n,
long,
lat
)
## Joining, by = "tofun"
# Leaflet-----
library(leaflet)
map <- leaflet( options = leafletOptions(minZoom = 2)) %>%
addProviderTiles(providers$CartoDB.DarkMatter,
options = list(detectRetina = TRUE,
noWrap = TRUE)) %>%
setView(-3.56948, 40.49181, zoom = 3) %>%
setMaxBounds(-180,-90,180,90) %>%
addCircles(
data=ndots,
lng = ~ long,
lat = ~ lat,
weight = 5,
radius = 1000,
popup = ~ name,
color = "green"
)
map
#Connecting Routes
connect=myflights %>% count(start,end) %>% arrange(desc(n))
connect=left_join(connect,
ndots %>%
select(
start=name,
long_init=long,
lat_init=lat
))
## Joining, by = "start"
connect=left_join(connect,
ndots %>%
select(
end=name,
long_end=long,
lat_end=lat
))
## Joining, by = "end"
library(geosphere)
## Warning: package 'geosphere' was built under R version 3.5.3
connectflights = gcIntermediate(
connect[, c("long_init", "lat_init")],
connect[, c("long_end", "lat_end")],
n = 1000,
breakAtDateLine = T,
sp = T
)
connect$n/(2*max(connect$n))
## [1] 0.50000000 0.50000000 0.14516129 0.12903226 0.12903226 0.12903226
## [7] 0.11290323 0.09677419 0.06451613 0.04838710 0.04838710 0.04838710
## [13] 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.01612903
## [19] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [25] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [31] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [37] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [43] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [49] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [55] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [61] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [67] 0.01612903 0.01612903 0.01612903
map3 <- addPolylines(map,weight=2*sqrt(connect$n),data = connectflights, opacity = sqrt(connect$n)/5,
col="green" ,group = "Flights")
map4 <- addEasyButton(map3,easyButton(
icon="fa-globe", title="Zoom to Level 1",
onClick=JS("function(btn, map){ map.setZoom(1); }")))
map4 <- addLayersControl(map3,
overlayGroups = c("Flights"),
options = layersControlOptions(collapsed = FALSE)
)
map4
library(leaflet.extras)
## Warning: package 'leaflet.extras' was built under R version 3.5.3
map5 <- addHeatmap(map,data = ndots, intensity = ~ n,
radius = 40,max=10, blur=40 )
## Assuming "long" and "lat" are longitude and latitude, respectively
map5
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.